﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ActionTrackerRules;
using ActionTrackerEntities;
using ActionTrackerRules.Helpers;

namespace ActionTrackerWeb.Controllers
{
    public class ReunionController : Controller
    {
        //
        // GET: /TipoReunion/

        public ActionResult Index()
        {         
            if (ValidarUsuario())
            {
                Usuario usuario = (Usuario)Session["UsuarioLogueado"];
                if (usuario.TipoUsuario == (int)TipoUsuarioEnum.Administrador && ((Usuario)Session["UsuarioLogueado"]).IdProyectoSeleccionado.HasValue)
                {
                    ReunionRules oReunionRules = new ReunionRules();
                    //traigo las reuniones del proyecto seleccionado
                    List<Reunion> oListReunion = oReunionRules.GetByFiltro(((Usuario)Session["UsuarioLogueado"]).IdProyectoSeleccionado);

                    return View(oListReunion);
                }
                return RedirectToAction("Index", "Home");
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }

        public ActionResult Create()
        {
            if (ValidarUsuario())
            {
                Usuario usuario = (Usuario)Session["UsuarioLogueado"];
                if (usuario.TipoUsuario == (int)TipoUsuarioEnum.Administrador)
                {
                    ReunionRules oReunionRules = new ReunionRules();
                    List<Reunion> oListReunion = oReunionRules.GetAll();

                    return View();
                }
                return RedirectToAction("Index", "Home");
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }

        [HttpPost]
        public ActionResult Create(Reunion model)
        {
            try
            {
                //busco el proyecto seleccionado en la web
                if (((Usuario)Session["UsuarioLogueado"]).IdProyectoSeleccionado.HasValue)
                {
                    model.Proyecto = new Proyecto();
                    model.Proyecto.IdProyecto = ((Usuario) Session["UsuarioLogueado"]).IdProyectoSeleccionado.Value;

                    ReunionRules oReunionRules = new ReunionRules();

                    switch (oReunionRules.Guardar(model))
                    {
                        case ResponseEnum.Ok:
                            Session["MensajeExito"] = "Se registró  la reunión!";    
                            break;
                        case ResponseEnum.Error:
                            Session["MensajeError"] = "Se produjo un error al intentar guardar la reunión";
                            break;
                        case ResponseEnum.EntidadExistente:
                            Session["MensajeError"] = "Existe una reunión con el nombre '"+ model.Descripcion + "'";
                            return RedirectToAction("Create");
                        default:
                            throw new ArgumentOutOfRangeException();
                    }
                }
                else
                {
                    Session["MensajeError"] = "No se encontraron proyectos activos, se canceló el registro de la reunión";
                }
                
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        [HttpPost]
        public ActionResult Edit(Reunion model)
        {
            try
            {
                ReunionRules oReunionRules = new ReunionRules();

                switch (oReunionRules.Actualizar(model))
                    {
                        case ResponseEnum.Ok:
                            Session["MensajeExito"] = "Se registró la reunión!";    
                            break;
                        case ResponseEnum.Error:
                            Session["MensajeError"] = "Se produjo un error al intentar editar la reunión";
                            break;
                        case ResponseEnum.EntidadExistente:
                            Session["MensajeError"] = "Existe una reunión con el nombre '"+ model.Descripcion + "'";
                            return RedirectToAction("Edit", new {id = model.IdReunion});
                        default:
                            throw new ArgumentOutOfRangeException();
                    }
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Edit(int id)
        {
            if (ValidarUsuario())
            {
                ReunionRules oReunionRules = new ReunionRules();
                Reunion oReunion = oReunionRules.GetById(id);

                return View(oReunion);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }

        public ActionResult Delete(int id)
        {
            return View();
        }

        public bool ValidarUsuario()
        {
            Usuario usuario = (Usuario)Session["UsuarioLogueado"];
            if (usuario == null)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
    }
}
